// Header Protection
#ifndef _PHSYICSSYSTEM_H_
#define _PHYSICSSYSTEM_H_

// Include Files
#include "Definitions.h"
#include "System.h"

// Forward Declarations
class CPhysicsNode;

// Namespace
namespace IE
{
	/////////////////////////////////////////////////////////////////////////////////
	// A system which calculates and applies physics to the scene.
	class CPhysicsSystem : public ABCSystem
	{
	public:     // methods
		CPhysicsSystem() : ABCSystem() { }
		virtual ~CPhysicsSystem() { }

		// Initialize the physics system.
		void Initialize();

		// Shutdown the physics system.
		void Shutdown();

	private:    // ABCSystem override methods

		// Called when the thread is started.
		virtual void ThreadBegin();

		// Called when the thread is stopped.
		virtual void ThreadEnd();

		// Called at the frame rate with which StartThread was called.
		// _fTime: float_t - the seconds that have passed since the last tick
		virtual void ThreadTick( float_t _fTime );

	private:    // data
		flist_t<CPhysicsNode *> m_lstNodes;

	private:    // dummy definitions
		CPhysicsSystem( CPhysicsSystem const & );
		CPhysicsSystem &operator =( CPhysicsSystem const & );
	};
}

// Header Protection
#endif // _PHYSICSSYSTEM_H_
